from dataclasses import dataclass
from typing import Optional


@dataclass
class SmsUpSignInRequest:
    """短信上行登录请求"""
    Area: str  # 区号
    Code: str  # 短信验证码
    DeviceName: str  # 设备名称
    Mobile: str  # 手机号码
    Sessionid: str  # 会话ID，通常使用设备ID


@dataclass
class SmsUpSignInData:
    """短信上行登录响应数据"""
    Token: str  # 登录令牌
    NickName: str  # 用户昵称
    IsOpenStock: bool  # 是否开通库存
    IsReg: bool  # 是否注册
    ForeignAccountTips: Optional[str] = None  # 外部账号提示，可能为空


@dataclass
class SmsUpSignInResponse:
    """短信上行登录响应"""
    Code: int  # 状态码，0表示成功
    Msg: str  # 响应消息
    TipType: int  # 提示类型
    Data: Optional[SmsUpSignInData] = None  # 响应数据
    
    @classmethod
    def from_dict(cls, data: dict):
        """从字典创建响应对象"""
        response_data = None
        if data.get('Data'):
            response_data = SmsUpSignInData(
                Token=data['Data'].get('Token', ''),
                NickName=data['Data'].get('NickName', ''),
                IsOpenStock=data['Data'].get('IsOpenStock', False),
                IsReg=data['Data'].get('IsReg', False),
                ForeignAccountTips=data['Data'].get('ForeignAccountTips')
            )
            
        return cls(
            Code=data.get('Code', -1),
            Msg=data.get('Msg', ''),
            TipType=data.get('TipType', 0),
            Data=response_data
        )
